                             - 407 -

    3.    /.

         /,  
    IBM PC,   , , -
   ..         -
,      IBM PC.
      ,      
,         .
  ,     ,   
   ,     -
.              
  IBM PC:

         

  00-0F       DMA 8237 (  PCjr)
  20-2F        8259 (AT  #1: 20-3F)
  40-4F        8253/8254
  60-6F       PPI 8255 (AT   
             
  70-7F         ( AT)
  80-83        DMA (  PCjr)
  A0-BF        #2 ( AT)
  C0-C7        SN76496 ( PCjr)
  F0-FF      PCjr -  , AT -  -
              
1F0-1F8        AT
200-20F       
278-27F      AT   #2
2F8-2FF        COM2 (COM1  PCjr)
320-32F        XT
378-37F          PC, XT, AT
3B0-3BF      /  (  PCjr)
3D0-3DF        
3F0-3F7       
3F8-3FF        COM1 ( PCjr)

                             - 408 -

   7.3.1 /   .

      IBM PC  PCjr    -
,  XT  AT     .   , 
  ,      -
 ,     .   , 
       PCjr.
 ,      2 -
   8253 [2.1.1],       -
       .   ,  
     ,     ,
     BIOS     -
.

    .

         - 
 ,       -
.         -
  .      -
 . ,       -
 .   ,    
 :

   .B        
   .P         
   .A           ASCII
   .M        
   .D        

         SAVE "CAS1:".
   - LOAD "CAS1:".   
    ,        ,
         
(   ).     
,        .

    .

   BIOS       256- .
   "",    256 
ASCII  1.      .   
       16H,   256 
.     2   ,    
 ,         ..
         "",
  ASCII 1.
             2 -
 15H.     ,    
  . ES:BX       , 
   ,  CX -  ,    -
.    DX       
,  ES:BX        1.
      0,       ,  
   AH   1,    
, 2 -       3 -   
 .

                             - 409 -

     3  15H    .  ES:BX
      ,    CX    ,
    .    ES:BX     ,
   .     0
()  1 ()  15H.    
 .

                             - 410 -

   7.3.2    .

         ,  
         ,  
   ,      .
       
  .         
   ,   
 ,       .   
 ,     -
 ,     .

    .

           -
.        .  
,   ,    -
 ,   .    
         PEN   
  X = PEN(n),  n -  ,    -
        .   -
 n :

  0     -1,       -
        , 0 -  
  1       x (0-319  0-639),  -
             (      
       ,   )
  2       y (0-199),   
         .
  3     -1,     0 -  
  4      x  (0-319  0-639) 
  5      y  (0-199) 
  6      -   (1-24),    
          
  7      -   (1-40  1-80),  -
            
  8       -   (1-24)
  9       -   (1-40  1-80)

             ,   
,     :

100 IF NOT PEN(3) THEN 130   '   
110 X = PEN(4)               '     x
120 Y = PEN(5)               '     y
130 ...                      ' 

          -
  ON PEN GOSUB.     
,    ,    -
 .       
   .     -
     .   -
,       ,     
  .

                             - 411 -

   ON PEN GOSUB     ,    -
   PEN ON.  PEN OFF   .    
  ,          
  ,        
.         
,     ON PEN GOSUB,  
PEN STOP.        ,
    ,     .   
     PEN ON,    -
  ON PEN GOSUB.
       ,   -
   .         
,    .

100 ON PEN GOSUB 5000   '   
110 PEN ON              '     
 .
 .
5000 '''   
5010 X = PEN(4)         '  X
5020 Y = PEN(5)         '  Y
5030 PSET(X,Y)          '  
5040 RETURN             '

    .

     4  10H BIOS    -
 .      .   AX 
0,       1 -      
 .      ,   
   .     DX, 
DH   (0-24),  DL  -   (0-79).  
   CH  BX,  CH   
(0-199),  BX -  (0-319  0-639,   
 ).

;---     
   MOV  AH,4            ; 
   INT  10H             ; BIOS
   CMP  AH,1            ; ?
   JE   NO_READING      ; ,  
   MOV  COL,BX          ;  
   MOV  CL,CH           ;  
   MOV  CH,0            ; CX
   MOV  ROW,CX          ;  

    .

           
      CRT 6845. 
      2- ,   
 10H ( )   11H  ( ) . 
[4.1.1]      .   
.      3DCH      
,    3DBH -  .

                             - 415 -

;---      
   MOV  DX,3DAH       ;   
   IN   AL,DX         ; 
   TEST AL,4          ; 
   JNZ  NOT_SET       ; 
   TEST AL,2          ; 
   JZ   NOT_SET       ; 
   SUB  DX,7          ;    6845
   MOV  AL,10H        ;     
   OUT  DX,AL         ; 
   INC  DX            ;    6845
   IN   AL,DX         ; 
   XCNG AH,AL         ;   AH
   DEC  DX            ;   
   MOV  AL,11H        ;    
   OUT  DX,AL         ; 
   INC  DX            ;   
   IN   AL,DX         ;    AX

                             - 413 -

   7.3.3      .

       2   4 "". 
           ; 
        . -
  ,     , 
     ;    -
     .     
  ,        
.

    .

    STICK     ,  -
  :

   0     X  A
   1     Y  A
   2     X  B
   3     Y  B

  , , X = STICK(0)   X  -
   X     A.     
,     .   
  0      ,    
  4 .   1-3   -
,   0.    3 
      X = STICK(0), 
     ,   0.
             ,
   ,     
    .       
 .         ,  ,
 , ,  ,  -
 ,      ,    
  .

100 '''   
110 STRIG ON            ' 
120 V= STRIG(0)         '  
130 PRINT "Briefly push button 1 when stick is farthest to left"
140 XLEFT = STICK(0)    '   
150 IF STRIG(0) = 0 THEN 140  '  
160 STRIG OFF: FOR N = 1 TO 1000: NEXT: STRIG ON
170 PRINT "Briefly push button 1 when stick is farthest to right"
180 XRIGHT = STICK(0)   '   
190 IF STRIG(0) = 0 THEN 180  '  
200 STRIG OFF: FOR N = 1 TO 1000: NEXT: STRIG ON
210 PRINT "Briefly push button 1 when stick is farthest to top"
220 V = STICK(0): YTOP = STICK(1)  '  
230 IF STRIG(0) = 0 THEN 220  '  
240 STRIG OFF: FOR N = 1 TO 1000: NEXT: STRIG ON
250 PRINT "Briefly push button 1 when stick farthest to bottom"
260 V = STICK(0): YBOTTOM = STICK(1)  '  
270 IF STRIG(0) = 0 THEN 260  '  
280 STRIG OFF           '
290 '''      
300 XRIGHT = XRIGHT - XLEFT   ' 

                             - 414 -

310 XMULTIPLIER = 320/XRIGHT  '    
320 YBOTTOM = YBOTTOM - YTOP  ' 
330 YMULTIPLIER = 200/B/YBOTTOM  '   
340 '''      
350 X = STICK(0)        '  
360 Y = STICK(1)        '  
370 X = (X - XLEFT)*XMULTIPRIER  '  
380 Y = (Y - YTOP)*YMULTIPRIER   '
390 PSET(X,Y)           '    
400 GOTO 350            '

    .

     AT       -
 .    84H  15H,  -
 , :

   AX  =   X  A
   BX  =   Y  A
   CX  =   X  B
   DX  =   Y  B

    DX 1.   DX  0,   -
      [7.3.4].   
  ,      .

    .

              
    ,       
  201H.    :

                               

 3       Y  B        D
 2       X  B        C
 1       Y  A        B
 0       X  A        A

              
 .         -
.      ,   4  .  
    ,   ,
       1.  
      .  -
        Y  
   X.    ,    0   1
 ,        
  .       
     Y,    
X.        .  
    X  A.

                             - 415 -

;---  X  A
   MOV  DX,201H         ;  
   OUT  DX,AL           ;    
   MOV  AH,1            ;  1
   MOV  SI,0            ; 
NEXT:   IN   AL,DX      ;   
   TEST AL,AH           ;  1
   JE   FINISHED        ;,   
   INC  SI              ;,  
   LOOP NEXT            ;  
FINISHED:

                             - 416 -

   7.3.4      .

           "", 
     .       
     .      
     ,        
    ,      
,     .   -
      .  
      ,  
   ;   ,    ,
      ,     
     .

    .

       STRIG      .
 STRIG  ,     -
,            
, ..    : "   ,
    ?"     
 ,      
 ,            .
        ,
      
 .    , STRIG    
  ,        
 .
   STRIG   .  -,    
  ,         
,   X = STRIG(n).  n -  :

   0     A1     
   1     A1    
   2     B1     
   3     B1    
   4     A2     
   5     A2    
   6     B2     
   7     B2    

      -1,    
0 -  .
        STRIG    ,    
       .  
 ON STRIG(n) GOSUB .    -
    .   n   ,  0 =
A1, 2 = B1, 4 = A2  6 = B2.      
         .
        STRIG     
STRIG(n) ON.      n   -
 .     (  ) -
 STRIG(n) OFF.      .  STRING(n)
STOP   ,    ,  
      STRING(n) ON.
      - -
 ON STRING GOSUB.       ,      
STRIG(n) STOP  .

                             - 417 -

        ON STRIG GOSUB.   
 [7.3.3]  ,   X = STRIG.

100 ON STRIG(0) GOSUB 5000   '  5000  
 .                           ' A1
200 STRIG(0) ON    '   
 .
300 STRIG(0) STOP  '   
 .
400 STRIG(0) ON    '   
 .
500 STRIG(0) OFF   '   
 .
5000 '''      A1
 .
5500 RETURN        '   ,   

    .

    AT        -
 .   84H  15H  
   4-7  AL,    .    DX
  0;  DX  1,     -
   [7.3.3].    -
 ,      .

;---  #2  B ( 7)
   MOV  AH,84H          ; 
   MOV  DX,0            ;  
   INT  15H             ; 
   JC   NO_JOYSTICK     ;  ,   
   TEST AL,10000000B    ;  7
   JNZ  BUTTON_DOWN     ;   

    .

     7-4    201H   , -
   .         
,     :

                          
 7     #2  B       D
 6     #1  B       C
 5     #2  A       B
 4     #1  A       A

           
  :

   MOV  DX,201H         ;   
   IN   AL,DX           ;   
   TEST AL,0010B        ;  1 ( A2 ?)
   JNZ  BUTTON_A2       ; ,    

     ,   
  ,        
 ,       .
      ,  -
  ,           
  ,    [2.1.7].     -
 18.2          -
       .